/*
 * 版权所有 (C) 2015 知启蒙(ZHIQIM) 保留所有权利。[遇见知启蒙，邂逅框架梦]
 * 
 * https://zhiqim.org/project/zhiqim_framework/zhiqim_orm.htm
 *
 * Zhiqim ORM is licensed under Mulan PSL v2.
 * You can use this software according to the terms and conditions of the Mulan PSL v2.
 * You may obtain a copy of Mulan PSL v2 at:
 *          http://license.coscl.org.cn/MulanPSL2
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PSL v2 for more details.
 */
package org.zhiqim.orm;

import org.zhiqim.kernel.Z;
import org.zhiqim.kernel.annotation.AnAlias;

/**
 * ORM工具类，简化获取ORMServer的方法
 *
 * @version v1.0.0 @author zouzhigang 2018-11-26 新建与整理
 */
@AnAlias("ORM")
public class ORM implements ORMConstants
{
    /** 用于简化ORM条件判定异常 */
    public static void as(String message) throws ORMException
    {
        if (message != null)
            throw new ORMException(message);
    }
    
    /***********************************************************************************/
    //ORM服务对象
    /***********************************************************************************/
    
    /** 获取第一个ORM服务 */
    public static ORMServer server()
    {
        return Z.serv().get(ORMServer.class);
    }
    
    /** 获取指定ID的ORM服务 */
    public static ORMServer server(String id)
    {
        return Z.serv().get(ORMServer.class, id);
    }
    
    /** 获取指定索引的ORM服务 */
    public static ORMServer server(int idx)
    {
        return Z.serv().get(ORMServer.class, idx);
    }
    
    /***********************************************************************************/
    //表指令对象
    /***********************************************************************************/
    
    /** 获取第一个表指令对象 */
    public static ZTable table()
    {
        return server().table();
    }
    
    /** 获取指定ID的表指令对象 */
    public static ZTable table(String id)
    {
        return server(id).table();
    }
    
    /** 获取指定索引的表指令对象 */
    public static ZTable table(int idx)
    {
        return server(idx).table();
    }
    
    /***********************************************************************************/
    //视图指令对象
    /***********************************************************************************/
    
    /** 获取第一个视图指令对象 */
    public static ZView view()
    {
        return server().view();
    }
    
    /** 获取指定ID的视图指令对象 */
    public static ZView view(String id)
    {
        return server(id).view();
    }
    
    /** 获取指定索引的视图指令对象 */
    public static ZView view(int idx)
    {
        return server(idx).view();
    }
    
    /***********************************************************************************/
    //SQL指令对象
    /***********************************************************************************/
    
    /** 获取第一个SQL指令对象 */
    public static ZSQL sql()
    {
        return server().sql();
    }
    
    /** 获取指定ID的SQL指令对象 */
    public static ZSQL sql(String id)
    {
        return server(id).sql();
    }
    
    /** 获取指定索引的SQL指令对象 */
    public static ZSQL sql(int idx)
    {
        return server(idx).sql();
    }
    
    /***********************************************************************************/
    //DDL指令对象
    /***********************************************************************************/
    
    /** 获取第一个DDL指令对象 */
    public static ZDDL ddl()
    {
        return server().ddl();
    }
    
    /** 获取指定ID的DDL指令对象 */
    public static ZDDL ddl(String id)
    {
        return server(id).ddl();
    }
    
    /** 获取指定索引的DDL指令对象 */
    public static ZDDL ddl(int idx)
    {
        return server(idx).ddl();
    }
    
    /***********************************************************************************/
    //表管理指令对象
    /***********************************************************************************/
    
    /** 获取第一个表管理指令对象 */
    public static ZTab tab()
    {
        return server().tab();
    }
    
    /** 获取指定ID的表管理指令对象 */
    public static ZTab tab(String id)
    {
        return server(id).tab();
    }
    
    /** 获取指定索引的表管理指令对象 */
    public static ZTab tab(int idx)
    {
        return server(idx).tab();
    }

    /***********************************************************************************/
    //表结果指令对象
    /***********************************************************************************/
    
    /** 获取第一个表结果指令对象 */
    public static ZTabler tabler()
    {
        return server().tabler();
    }
    
    /** 获取指定ID的表结果指令对象 */
    public static ZTabler tabler(String id)
    {
        return server(id).tabler();
    }
    
    /** 获取指定索引的表结果指令对象 */
    public static ZTabler tabler(int idx)
    {
        return server(idx).tabler();
    }
}
